//
//  WCBuildConfiguration.h
//  WabbitCode
//
//  Created by William Towe on 12/4/08.
//  Copyright 2008 Revolution Software. All rights reserved.
//

#import <Cocoa/Cocoa.h>
#import "WCTreeNode.h"


extern NSString *kWCBCCreateCodeListingOptionName;
extern NSString *kWCBCCreateSymbolTableOptionName;
extern NSString *kWCBCLabelsAndMacrosAreCaseSensitiveOptionName;
extern NSString *kWCBCDefinesOptionName;
extern NSString *kWCBCIncludeDirectoriesOptionName;

extern NSString *kWCBCBuildConfigurationNameDidChangeNotification;

@class WCBuildTarget;

@interface WCBuildConfiguration : WCTreeNode <NSCoding, NSCopying, NSMutableCopying> {
	WCBuildTarget *_buildTarget;
	BOOL _isConfigurationActive;
	BOOL _createCodeListing;
	BOOL _createSymbolTable;
	BOOL _labelsAndMacrosAreCaseSensitive;
	NSMutableArray *_defines;
	NSMutableArray *_includeDirectories;
}
@property (readonly) NSArray *arrayOfOptionNames;
@property (readonly) NSUInteger numberOfOptions;
@property (readwrite, assign) BOOL createCodeListing;
@property (readwrite, assign) BOOL createSymbolTable;
@property (readwrite, assign) BOOL labelsAndMacrosAreCaseSensitive;
@property (readwrite, assign) BOOL isConfigurationActive;
@property (readonly) WCBuildTarget *buildTarget;
@property (readwrite, retain) NSMutableArray *defines;
@property (readwrite, retain) NSMutableArray *includeDirectories;
@property (readonly) NSArray *processedIncludeDirectories;

@property (readonly) NSArray *processedDefines;
@property (readonly) NSString *processedDefinesAsString;

+ (WCBuildConfiguration *)buildConfigWithName:(NSString *)name forBuildTarget:(WCBuildTarget *)buildTarget;

- (id)initWithName:(NSString *)name forBuildTarget:(WCBuildTarget *)buildTarget;

- (NSCell *)cellForOptionName:(NSString *)optionName;
- (id)valueForOptionName:(NSString *)optionName;
- (void)setObjectValue:(id)value forOptionName:(NSString *)optionName;

- (void)recursivelyAddIncludeDirectoriesWithDirectoryPath:(NSString *)directoryPath;
- (void)recursivelyAddIncludeDirectoriesWithDirectoryPath:(NSString *)directoryPath includeRootDirectory:(BOOL)flag;
@end
